package com.luckcoder.relax.games.domain.dto;

import lombok.Data;
import java.util.List;
import java.time.LocalDateTime;

/**
 * 全局游戏统计数据
 *
 * @author zhanghao
 * @date 2025-09-11
 */
@Data
public class GlobalGameStats {
    
    /**
     * 游戏编码
     */
    private String gameCode;
    
    /**
     * 总用户数
     */
    private Integer totalUsers;
    
    /**
     * 今日活跃用户数
     */
    private Integer todayActiveUsers;
    
    /**
     * 总游戏次数
     */
    private Integer totalPlayCount;
    
    /**
     * 今日游戏次数
     */
    private Integer todayPlayCount;
    
    /**
     * 全服最高分
     */
    private Long globalBestScore;
    
    /**
     * 全服最高分用户
     */
    private String globalBestScoreUser;
    
    /**
     * 累计总分数
     */
    private Long totalScore;
    
    /**
     * 全服平均分数
     */
    private Double globalAvgScore;
    
    /**
     * 累计游戏时长（小时）
     */
    private Integer totalPlayTimeHours;
    
    /**
     * 累计消灭数量
     */
    private Long totalEliminatedCount;
    
    /**
     * 今日消灭数量
     */
    private Long todayEliminatedCount;
    
    /**
     * 最受欢迎的emoji（前5名）
     */
    private List<PopularEmoji> popularEmojis;
    
    /**
     * 游戏结果分布
     */
    private GameResultDistribution resultDistribution;
    
    /**
     * 分数段分布
     */
    private List<ScoreDistribution> scoreDistributions;
    
    /**
     * 统计更新时间
     */
    private LocalDateTime lastUpdateTime;
    
    /**
     * 热门emoji统计项
     */
    @Data
    public static class PopularEmoji {
        /**
         * Emoji字符
         */
        private String emojiChar;
        
        /**
         * 消灭次数
         */
        private Long eliminatedCount;
        
        /**
         * 占总消灭数的百分比
         */
        private Double percentage;
        
        /**
         * 消灭用户数
         */
        private Integer userCount;
    }
    
    /**
     * 游戏结果分布
     */
    @Data
    public static class GameResultDistribution {
        /**
         * 完成次数
         */
        private Integer completedCount;
        
        /**
         * 超时次数
         */
        private Integer timeoutCount;
        
        /**
         * 退出次数
         */
        private Integer quitCount;
        
        /**
         * 完成率
         */
        private Double completionRate;
    }
    
    /**
     * 分数段分布
     */
    @Data
    public static class ScoreDistribution {
        /**
         * 分数段范围（如：0-100）
         */
        private String scoreRange;
        
        /**
         * 该分数段的游戏次数
         */
        private Integer playCount;
        
        /**
         * 占总次数的百分比
         */
        private Double percentage;
    }
}